/**
 * 测试完整流程接口
 * 一次性完成：TikTok URL → 商品名称 → Shoplus API → 完整商品数据 → 数据库
 */

const axios = require('axios');

const BASE_URL = 'http://localhost:3000/api/products';

// 测试用的TikTok商品链接
const TEST_URLS = [
  'https://shop.tiktok.com/view/product/1731808168774042656?region=MY&local=en&source=product_detail',
  'https://shop.tiktok.com/view/product/1234567890123456789?region=MY&local=en&source=product_detail'
];

/**
 * 测试完整流程接口
 */
async function testCompleteFlow(url) {
  console.log('\n=== 测试完整流程接口 ===');
  console.log('测试URL:', url);
  
  try {
    const startTime = Date.now();
    
    const response = await axios.post(`${BASE_URL}/complete-flow`, {
      url: url
    });
    
    const endTime = Date.now();
    const duration = endTime - startTime;
    
    console.log('\n✅ 完整流程测试成功');
    console.log('⏱️  执行时间:', duration + 'ms');
    console.log('📊 响应状态:', response.status);
    console.log('📝 响应消息:', response.data.message);
    
    if (response.data.success) {
      const { product, tiktokData, shoplusData, isNewProduct, steps } = response.data.data;
      
      console.log('\n📦 商品信息:');
      console.log('  - ID:', product.id);
      console.log('  - 名称:', product.productName);
      console.log('  - 价格 (USD):', product.priceUsd);
      console.log('  - 价格 (RMB):', product.price);
      console.log('  - 店铺:', product.sellerName);
      console.log('  - 周销量:', product.weekSoldCount);
      console.log('  - 周销售额 (USD):', product.weekSalesUsd);
      console.log('  - 总销售额 (USD):', product.totalSalesUsd);
      console.log('  - 关联视频:', product.relatedVideos);
      console.log('  - 关联达人:', product.relatedAuthor);
      
      console.log('\n🔄 执行步骤:');
      console.log('  - TikTok爬取:', steps.step1_tiktok);
      console.log('  - Shoplus搜索:', steps.step2_shoplus);
      console.log('  - 是否新商品:', isNewProduct);
      
      if (tiktokData) {
        console.log('\n🎯 TikTok数据获取成功');
      }
      
      if (shoplusData) {
        console.log('\n🛍️  Shoplus数据获取成功');
        console.log('  - 搜索关键词:', response.data.data.searchKeywords);
        console.log('  - 搜索结果数:', response.data.data.searchResults);
      }
    } else {
      console.log('\n❌ 完整流程失败');
      console.log('错误信息:', response.data.message);
      console.log('失败步骤:', response.data.step);
      if (response.data.error) {
        console.log('详细错误:', response.data.error);
      }
    }
    
    return response.data;
    
  } catch (error) {
    console.log('\n❌ 请求失败');
    console.log('错误信息:', error.message);
    
    if (error.response) {
      console.log('HTTP状态:', error.response.status);
      console.log('响应数据:', error.response.data);
    }
    
    return null;
  }
}

/**
 * 对比测试：完整流程 vs 分步流程
 */
async function compareFlows(url) {
  console.log('\n\n=== 对比测试：完整流程 vs 分步流程 ===');
  
  // 先删除可能存在的商品（用于测试）
  const productId = url.match(/\/product\/(\d+)/)?.[1];
  if (productId) {
    try {
      await axios.delete(`${BASE_URL}/${productId}`);
      console.log('已删除现有商品，准备重新测试');
    } catch (e) {
      // 忽略删除错误
    }
  }
  
  // 测试完整流程
  console.log('\n--- 测试完整流程 ---');
  const completeFlowStart = Date.now();
  const completeFlowResult = await testCompleteFlow(url);
  const completeFlowTime = Date.now() - completeFlowStart;
  
  // 删除商品，准备测试分步流程
  if (productId) {
    try {
      await axios.delete(`${BASE_URL}/${productId}`);
    } catch (e) {
      // 忽略删除错误
    }
  }
  
  // 测试分步流程
  console.log('\n--- 测试分步流程 ---');
  const twoStepStart = Date.now();
  let twoStepResult = null;
  
  try {
    // 步骤一
    console.log('执行步骤一：TikTok爬取...');
    const step1Response = await axios.post(BASE_URL, { url: url });
    
    if (step1Response.data.success) {
      const productId = step1Response.data.data.id;
      console.log('步骤一成功，商品ID:', productId);
      
      // 步骤二
      console.log('执行步骤二：Shoplus搜索...');
      const step2Response = await axios.post(`${BASE_URL}/${productId}/auto-update`);
      
      if (step2Response.data.success) {
        console.log('步骤二成功');
        twoStepResult = step2Response.data;
      } else {
        console.log('步骤二失败:', step2Response.data.message);
      }
    } else {
      console.log('步骤一失败:', step1Response.data.message);
    }
  } catch (error) {
    console.log('分步流程失败:', error.message);
  }
  
  const twoStepTime = Date.now() - twoStepStart;
  
  // 对比结果
  console.log('\n=== 对比结果 ===');
  console.log('完整流程耗时:', completeFlowTime + 'ms');
  console.log('分步流程耗时:', twoStepTime + 'ms');
  console.log('完整流程成功:', completeFlowResult?.success || false);
  console.log('分步流程成功:', twoStepResult?.success || false);
  
  if (completeFlowTime < twoStepTime) {
    console.log('✅ 完整流程更快');
  } else {
    console.log('⚠️  分步流程更快');
  }
}

/**
 * 测试错误处理
 */
async function testErrorHandling() {
  console.log('\n\n=== 测试错误处理 ===');
  
  // 测试无效URL
  console.log('\n--- 测试无效URL ---');
  await testCompleteFlow('https://invalid-url.com');
  
  // 测试缺少参数的URL
  console.log('\n--- 测试缺少参数的URL ---');
  await testCompleteFlow('https://shop.tiktok.com/view/product/1234567890');
  
  // 测试空URL
  console.log('\n--- 测试空URL ---');
  try {
    await axios.post(`${BASE_URL}/complete-flow`, {});
  } catch (error) {
    console.log('空URL测试成功，返回400错误');
  }
}

/**
 * 主测试函数
 */
async function main() {
  console.log('🚀 开始测试完整流程接口');
  console.log('服务器地址:', BASE_URL);
  
  // 基础功能测试
  for (let i = 0; i < TEST_URLS.length; i++) {
    const url = TEST_URLS[i];
    console.log(`\n📋 测试 ${i + 1}/${TEST_URLS.length}`);
    await testCompleteFlow(url);
    
    // 等待一下，避免请求过快
    await new Promise(resolve => setTimeout(resolve, 1000));
  }
  
  // 对比测试
  await compareFlows(TEST_URLS[0]);
  
  // 错误处理测试
  await testErrorHandling();
  
  console.log('\n🎉 所有测试完成！');
}

// 运行测试
if (require.main === module) {
  main().catch(console.error);
}

module.exports = {
  testCompleteFlow,
  compareFlows,
  testErrorHandling
};